/**
 *
 */
package com.tongzhan.utils;

import org.apache.commons.lang3.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.Date;

/**
 * @author mintonzhang 2018年7月27日
 */
public class FileUtil {

    /**
     * 保存文件
     *
     * @param file
     * @return
     * @throws Exception 2018年7月26日
     * 
     */
    public final static String saveFile(MultipartFile file) {
        try {
            String myFileName = file.getOriginalFilename();
            if (StringUtils.isNotBlank(myFileName)) {
                byte[] b = file.getBytes();
                String savePath = DateSwitcher.date2String(new Date(), "yyyyMMdd");
                String path = ConfigPropertiesUtil.getUploadFilePath() + savePath;
                // 定义上传路径
                checkPath(path);
                int index = myFileName.lastIndexOf(".");
                String extension = "";
                if (index > 0) {
                    extension = myFileName.substring(index);
                }
                //去掉中文乱码
                myFileName = URLEncoder.encode(myFileName,"utf-8").replaceAll("\\%","");
                String filename = myFileName.replace(extension, "") + "_"
                        + System.currentTimeMillis() + extension;
                OutputStream out = new FileOutputStream(path + "/" + filename);
                out.write(b);
                out.flush();
                out.close();
                return ConfigPropertiesUtil.getFileRootUrl() + savePath + "/" + filename;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * path中不能出现/
     *
     * @param path 2018年9月8日
     * 
     */
    public final static void checkPath(String path) {
        File file = new File(path);
        if (!file.exists()) {
            file.mkdirs();
        }
    }


    /**
     * 保存文件
     *
     * @param file
     * @return
     * @throws Exception 2018年7月26日
     * 
     */
    public final static String saveFiles(MultipartFile[] files) {
        String str = "";
        for (MultipartFile file : files) {
            String saveFile = saveFile(file);
            if (saveFile != null) {
                str += saveFile + ",";
            }
            //这样在前端判断会出现问题  如 1,1,null  3个 无法得知是否要去逗号

        }
        return StringUtils.isBlank(str) ? null : str.substring(0, str.length() - 1);
    }

    /**
     * 判断是否超过最大文件数量
     *
     * @param files
     * @param length     最大length
     * @param isRequired 是否必填
     * @return 2018年7月30日
     * 
     */
    public final static boolean maxLength(MultipartFile[] files, int length, boolean isRequired) {
        if (files != null) {
            return files.length > length ? true : false;
        }
        return isRequired;
    }

    /**
     * 判断是否大于限制的size
     *
     * @param files 文件
     * @param mSize M做单位
     * @return 大于限制大小返回true 反之false 2018年7月27日
     * 
     */
    public final static boolean checkSize(MultipartFile[] files, int mSize) {
        Long limitSize = (mSize * 1024L * 1024L);
        Long sumSize = 0L;
        if (files != null && files.length > 0) {
            for (MultipartFile multipartFile : files) {
                sumSize += multipartFile.getSize();// size的单位为kb
            }
        }
        return sumSize > limitSize ? true : false;
    }
    public final static boolean checkSingleSize(MultipartFile file, int mSize) {
        Long limitSize = (mSize * 1024L * 1024L);
        Long sumSize = 0L;
        if (file != null ) {

            sumSize += file.getSize();// size的单位为kb

        }
        return sumSize > limitSize ? true : false;
    }
}
